<?php
/**
 * 应用类
 * 用于初始化应用、配置应用、运行应用
 */
namespace core;

use core\Config;

class App {
    private static $route;
    private static $app;

    public static function setConfig($config) {
        // 使用Config类管理配置
        Config::init($config);
        // 初始化应用
        self::initApp();
    }

    private static function initApp() {
        // 从Config类获取配置
        $multi = Config::get('app_multi', false);
        if ($multi) {
            // 从URL中获取应用名，如 /admin/index
            $uri = $_SERVER['REQUEST_URI'];
            $position = strpos($uri, '?');
            if ($position !== false) {
                $uri = substr($uri, 0, $position);
            }
            $segments = explode('/', trim($uri, '/'));
            $app = !empty($segments[0]) ? $segments[0] : Config::get('default_app');
            // 检查应用是否存在
            if (is_dir(APP_PATH . $app)) {
                self::$app = $app;
            } else {
                self::$app = Config::get('default_app');
            }
        } else {
            self::$app = Config::get('default_app', 'index');
        }
        // 定义应用路径常量
        define('APP_CURRENT', self::$app);
        define('APP_CONTROLLER_PATH', APP_PATH . self::$app . '/controller/');
        define('APP_MODEL_PATH', APP_PATH . self::$app . '/model/');
        define('APP_VIEW_PATH', APP_PATH . self::$app . '/view/');
    }

    public static function getConfig($key = null) {
        // 代理到Config类
        return Config::get($key);
    }

    public static function getApp() {
        return self::$app;
    }

    public static function run() {
        try {
            // 初始化路由
            self::$route = new Route();
            // 解析请求
            self::$route->dispatch();
        } catch (\Exception $e) {
            // 处理异常
            ExceptionHandler::handle($e);
        }
    }
}